2011-09-29 23 views
8

Theo the HTML4 reference không có thuộc tính nào để chuyển qua tiêu đề HTTP bằng thẻ neo.Bạn sẽ chuyển các tiêu đề HTTP bằng cách sử dụng thẻ neo tiêu chuẩn như thế nào?

Tôi muốn cung cấp liên kết yêu cầu loại tệp cụ thể bằng cách sử dụng tiêu đề Accept.

Cách duy nhất tôi có thể thấy chỉ đơn giản là để cho nó được, và vượt qua một tham số GET.

Bạn có thể là lý do tại sao Tôi muốn thực hiện việc này ... Tôi dự định hiển thị một loạt các phương thức dưới dạng API công khai, phục vụ kết quả là JSON. Và khi thực hiện yêu cầu sử dụng JavaScript hoặc một ngôn ngữ lập trình khác, sử dụng tiêu đề Accept để yêu cầu định dạng phản hồi cụ thể là "The Right Way" để thực hiện. Nhưng điều đó có nghĩa là tôi cần phải chứa cả thông sốtiêu đề thông số GET trong mã của tôi, có mùi giống như một bản sao của logic.

Chủ đề này là chủ yếu gây tranh cãi, như liên kết như vậy có thể không thể bookmark trong trình duyệt ... vẫn ... Tôi muốn biết nếu nó là tốt mà không quá nhiều phép thuật ...

+0

Sử dụng conneg không phải lúc nào cũng là "đúng cách", nó chỉ là một công cụ khác trong hộp công cụ của bạn. Tạo tài nguyên riêng biệt (URL) cho các biến thể và chuyển sang cuộc sống. –

Trả lời

3

Tôi không thấy một cách khác hơn là sử dụng các tham số GET hoặc một phần mở rộng như

http://myurl/page?format=json

hoặc tốt hơn

http://myurl/page.json

nào đè chấp nhận tiêu đề (vì trình duyệt sẽ chỉ gửi tiêu đề mặc định là chấp nhận). Sau đó, bạn chỉ cần khởi tạo một định dạng để chấp nhận bản đồ tiêu đề như thế này (mà tôi không tìm thấy lý trùng lặp ở tất cả):

{ 
    "json" : "application/json", 
    "html" : "text/html" 
} 
+0

Nếu bạn sử dụng javascript, bạn có thể thực hiện bất kỳ yêu cầu nào với bất kỳ tiêu đề (chấp nhận) nào và không bị giới hạn ở 'tiêu đề chấp nhận mặc định'. – Eddy

+0

Đây là cách tiếp cận hoàn toàn hợp lệ để cho phép người dùng chọn một biến thể cụ thể. Không có gì sai khi tạo các tài nguyên/URI riêng biệt để cho phép lựa chọn biến thể. Việc đàm phán nội dung do máy chủ điều khiển không phải lúc nào cũng đúng. –

0

Bạn không thể.

Tôi dự định trưng ra một loạt các phương thức làm API công khai, phân phát kết quả là JSON. Và khi thực hiện yêu cầu sử dụng JavaScript hoặc một ngôn ngữ lập trình khác, sử dụng tiêu đề Accept để yêu cầu định dạng phản hồi cụ thể là "The Right Way" để thực hiện. Nhưng điều đó có nghĩa là tôi cần phải chứa cả hai tiêu đề Accept và tham số GET trong mã của tôi, có mùi giống như một bản sao của logic.

Nếu tôi hiểu chính xác, bạn không phải thực hiện việc này. Trình duyệt đã cung cấp tiêu đề Accept.

+1

Đã cấp. Nhưng tôi đã hỏi liệu nó có thể ghi đè nó không. – exhuma

0

Hmm, có vẻ như nếu kết quả của bạn là JSON, bạn sẽ được gửi/nhận từ tập lệnh, có thể cung cấp bất kỳ tiêu đề nào bạn muốn. Chỉ cần có liên kết của bạn gọi một chức năng kịch bản và bạn đã hoàn tất.

+0

Sử dụng 'JSON' chỉ là một ví dụ. Trong trường hợp của tôi, tôi muốn hiển thị một danh sách có thể truy cập dưới dạng 'PDF',' HTML' hoặc 'JSON', trong đó' PDF' có thể truy cập được thông qua liên kết. – exhuma

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