2008-10-20 48 views
40

Tôi muốn chụp các trường tiêu đề yêu cầu HTTP, chủ yếu là Người giới thiệu và Tác nhân người dùng, trong JavaScript phía máy khách của tôi. Tôi có thể truy cập chúng bằng cách nào?Làm cách nào để truy cập các trường tiêu đề yêu cầu HTTP qua JavaScript?


Google Analytics quản lý để lấy dữ liệu qua JavaScript mà họ đã nhúng vào trang của bạn, vì vậy, điều đó hoàn toàn có thể.

liên quan:
Accessing the web page's HTTP Headers in JavaScript

+0

Câu hỏi ban đầu là liệu HTTP Headers có thể được truy cập trong javascript hay không. Đã đăng câu hỏi đó một cách riêng biệt, để rõ ràng. http://stackoverflow.com/questions/220231/accessing-http-headers-in-javascript – keparo

Trả lời

52

Nếu bạn muốn truy cập giới thiệu và sử dụng đại lý, những người có sẵn để client-side Javascript, nhưng không phải bằng cách truy cập các tiêu đề trực tiếp.

Để truy xuất liên kết giới thiệu, hãy sử dụng document.referrer.
Để truy cập tác nhân người dùng, hãy sử dụng navigator.userAgent.

Như những người khác đã chỉ ra, tiêu đề HTTP không có sẵn, nhưng bạn đã hỏi cụ thể về người giới thiệu và tác nhân người dùng, có sẵn qua Javascript.

+0

Bạn có tài liệu tham khảo nơi tôi có thể tìm thấy tất cả các giá trị có sẵn không? – dacracot

+0

Tôi không quan tâm nếu nó là gián tiếp có sẵn, do đó, không đọc quá nhiều vào phrasing của tôi phrasing của câu hỏi. – dacracot

+0

@GrantWagner: Tôi cần biết liệu ['Origin'header được đặt] (http://stackoverflow.com/q/26247041/2284570) chưa. – user2284570

7

Gần như theo định nghĩa, JavaScript phía máy khách không ở đầu nhận của yêu cầu http, do đó, nó không có tiêu đề để đọc. Thông thường nhất, JavaScript của bạn là kết quả của phản hồi http. Nếu bạn đang cố gắng lấy các giá trị của yêu cầu http đã tạo ra phản hồi của bạn, bạn sẽ phải viết mã phía máy chủ để nhúng các giá trị đó vào mã JavaScript mà bạn tạo ra.

Có một chút khó khăn khi có mã phía máy chủ tạo mã phía máy khách, vì vậy hãy chắc chắn đó là những gì bạn cần. Ví dụ, nếu bạn muốn thông tin User-agent, bạn có thể thấy nó đủ để nhận được các giá trị khác nhau mà JavaScript cung cấp để phát hiện trình duyệt. Bắt đầu với navigator.appName và navigator.appVersion.

0

tôi sẽ tưởng tượng Google lấy một số dữ liệu phía máy chủ - nhớ, khi một trang tải vào trình duyệt của bạn có mã Google Analytics bên trong nó, trình duyệt của bạn làm cho một yêu cầu đến máy chủ của Google; Google có thể lấy dữ liệu theo cách đó cũng như thông qua JavaScript được nhúng trong trang.

+0

Không, mã của Google là JavaScript được nhúng trong html tĩnh của tôi, trong trường hợp của tôi trên sourceforge.net. Không có khả năng thực thi phía máy chủ. – dacracot

+0

Hoặc bạn có nghĩa là trên máy chủ _their_? – dacracot

+0

Tôi có nghĩa là máy chủ _their_ - trình duyệt của bạn thực hiện yêu cầu đến máy chủ của họ khi tải trang. –

5

Điều này có thể được truy cập thông qua Javascript vì đó là thuộc tính của tài liệu được tải chứ không phải của tài liệu gốc.

Dưới đây là một ví dụ nhanh:

<script type="text/javascript"> 
document.write(document.referrer); 
</script> 

Các điều tương tự trong PHP sẽ là:

<?php echo $_SERVER["HTTP_REFERER"]; ?> 
0

Referer và user-agent là yêu cầu tiêu đề, không đáp ứng tiêu đề.

Điều đó có nghĩa là chúng được gửi bởi trình duyệt hoặc cuộc gọi ajax (bạn có thể sửa đổi giá trị) và chúng được quyết định trước khi bạn nhận phản hồi HTTP.

Vì vậy, về cơ bản bạn không yêu cầu tiêu đề HTTP, nhưng là cài đặt trình duyệt.

Giá trị bạn nhận được từ document.referer và navigator.userAgent có thể không phải là tiêu đề thực, mà là cài đặt của trình duyệt.

+0

Tôi vừa mới đưa ra câu hỏi này bởi vì tôi cần biết liệu ['Origin'header được đặt] (http://stackoverflow.com/q/26247041/2284570) chưa. – user2284570

-9
var ref = Request.ServerVariables("HTTP_REFERER"); 

Nhập trong dấu ngoặc kép bất kỳ tên biến máy chủ nào khác mà bạn muốn.

+2

Làm thế nào điều này liên quan đến JavaScript? – nevermind

+0

FYI: Đây là ASP nhưng không phải là Javascript. –

Các vấn đề liên quan